package com.itheima.controller;


import com.itheima.common.constant.RedisMessageConstant;
import com.itheima.common.entity.Result;
import com.itheima.common.utils.SMSUtils;
import com.itheima.common.utils.ValidateCodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/validatecode")
@CrossOrigin
@Slf4j
public class ValidateCodeController {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 体检预约发送验证码
     */
    @PostMapping("/send4Order")
    public Result send4Order(String telephone) {
        try {
            // 1. 参数校验
            if (telephone == null || telephone.length() != 11) {
                return new Result(false, "手机号码格式不正确");
            }

            // 2. 生成4位数字验证码
            Integer code = ValidateCodeUtils.generateValidateCode(4);

            // 3. 发送验证码到用户手机
            SMSUtils.sendMessage(SMSUtils.VALIDATE_CODE, telephone, code.toString());

            // 4. 将验证码保存到Redis（5分钟有效）
            String key = RedisMessageConstant.SENDTYPE_ORDER + telephone;
            redisTemplate.opsForValue().set(key, code.toString(), 120, TimeUnit.MINUTES);

            log.info("向手机号{}发送验证码：{}", telephone, code);

            return new Result(true, "验证码发送成功");
        } catch (Exception e) {
            log.error("发送验证码失败", e);
            return new Result(false, "验证码发送失败");
        }
    }

    /**
     * 快速登录发送验证码
     * @param telephone
     * @return
     */
    @GetMapping("/send4Login")
    public Result send4Login(@RequestParam String telephone) {
        try {
            // 1. 参数校验// 1. 参数校验// 1. 参数校验
            if (telephone == null || telephone.length() != 11) {
                return new Result(false, "手机号码格式不正确");
            }
            // 2. 生成4位数字验证码
            Integer code = ValidateCodeUtils.generateValidateCode(6);
            // 3. 发送验证码到用户手机
            SMSUtils.sendMessage(SMSUtils.VALIDATE_CODE, telephone, code.toString());
            // 4. 将验证码保存到Redis（120分钟有效）
            String key = RedisMessageConstant.SENDTYPE_LOGIN + telephone;
            redisTemplate.opsForValue().set(key, code.toString(), 120, TimeUnit.MINUTES);

            log.info("向手机号{}发送验证码：{}", telephone, code);

            return new Result(true, "验证码发送成功");
        }
        catch (Exception e) {
            log.error("发送验证码失败", e);
            return new Result(false, "验证码发送失败");
        }
    }

}
